遗传算法类OX交叉选择算法的python实现

与背包问题不同,在求解TSP问题时,染色体编码采用整数编码而不是二进制编码,对于每个城市用一个整数来编号,一个路径就是一条染色体编码。在进行选择运算时,常采用类OX交叉算法,其思路为:
假设
父代 A 1250|436|798
父代 B 3097|654|281
对染色体切片后随机选择一个片段,比如父代B的中间片段654,作为子代的一个片段,在父代A中选择A中存在而父代B中选择的片段不存在的基因,将其作为子代的基因,由此得到子代染色体编码为1203|654|798实现代码为:

def cross(self, parent1, parent2):
            index1 = random.randint(0, self.geneLenght - 1)
            index2 = random.randint(index1, self.geneLenght - 1)
            tempGene = parent2.gene[index1:index2] #交叉的基因片段
            newGene = []
            len = 0
            for g in parent1.gene:
                  if len == index1:
                        newGene.extend(tempGene)# 插入基因片段
                        len += 1
                  if g not in tempGene:
                        newGene.append(g)
                        len += 1
            self.crossCount += 1
            return newGene
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值